// const { rejects } = require("assert");
// const { resolve } = require("dns");

/**
 * 一般的get请求，不带参数
 * @param {String} url 接口地址	
 * @param {Function} funSuccess 成功的回调
 * @param {Function} funFail 请求结束的回调
 */
function get(url, funSuccess, funComplete) {
	uni.showLoading({
		title: '加载中......',
		mask: false
	});
	uni.request({
		url: url,
		method: "GET",
		sslVerify: false,
		header: {
			"content-type": "application/json;charset=UTF-8"
		},
		data:{},
		success: res => {
			funSuccess(res.data);
		},
		fail: err => {
			// funFail(err);
			console.log(err);
		},
		complete: () => {
			//黑色的加载结束框
			uni.hideLoading();
			//除非第三个@是funComplete
			funComplete();
		}
	});
}
/**
 * GET请求，需要用户传递header
 *@param {String} url 接口地址
 *@param {JSON} header 请求头,包含参数,若没有参数可以使用get方法
 *@param {Function} funSuccess 成功的回调
 *@param {Function} funComplete 请求结束的回调,如果不需要处理则传递一个空方法即可
 */


function getWithHeader(url, header, funSuccess, funFail,funComplete) {
	uni.showLoading({
		title: "加载中......",
		mask: false
	});
	uni.request({
		url,
		header,
		method: 'GET',
		sslVerify: false,
		success: res => {
			funSuccess(res.data)
		},
		fail: err => {
			console.log(err);
		},
		complete: () => {
			uni.hideLoading();
			uni.stopPullDownRefresh()
			// funComplete(); 
		}

	});
}
function postParam(url,data,funSuccess,funComplete){
	uni.showLoading({
		title:'提交数据...',
		mask:false
	});
	uni.request({
		url:url,
		header:{
			"Accept":"application/json;q=0.9,*/*;q=0.1",
			"Content-Type":"application/x-www-form-urlencoded;charset=UTF-8"
		},
		method:'POST',
		sslVerify:false,
		data:data,
		success:res=>{funSuccess(res.data);
		},
		fail:err=>{
			console.log(err);
			},
		complete:()=>{
			uni.hideLoading();
			funComplete();
		},
	});
}
/**
 * GET请求，需要用户传递header
 *@param {String} url 接口地址
 *@param {JSON} data 要提交的数据
 *@param {Function} funSuccess 成功的回调
 *@param {Function} funComplete 请求结束的回调,如果不需要处理则传递一个空方法即可
 */
function post(url,data,funSuccess,funComplete){
	uni.showLoading({
		title:'提交数据...',
		mask:false
	});
	uni.request({
		url:url,
		method:'POST',
		sslVerify:false,
		data:data,
		success:res=>funSuccess(res.data),
		fail:err=>{
			console.log(err);
			},
		complete:()=>{
			uni.hideLoading();
			funComplete();
		},
	});
}
/**
 * GET请求，需要用户传递header
 *@param {String} url 接口地址
 *@param {JSON} data 要提交的数据
 *@param {Function} funSuccess 成功的回调
 *@param {Function} funComplete 请求结束的回调,如果不需要处理则传递一个空方法即可
 */
function deleteParams(url,data,funSuccess,funComplete){
	uni.request({
		url:url,
		header:{
			"Accept":"application/json;q=0.9,*/*;q=0.1",
			"Content-Type":"application/x-www-form-urlencoded;charset=UTF-8"
		},
		method:'DELETE',
		sslVerify:false,
		data:data,
		success:res=>funSuccess(res.data),
		fail:err=>{
			console.log(err);
		},
		complete:()=> {
			funComplete();
		}
	});
}
/**
 * GET请求，需要用户传递header
 *@param {String} url 接口地址
 *@param {String} name VV件上传接口参数名，一般是file
 *@param {String} filePath 本地VV件
 *@param {JSON} data 其他表单参数如user/passWord等
 *@param {Function} funSuccess 上传成功的回调
 */
function postFile(url,name,filePath,data,funSuccess){
	uni.uploadFile({
		url,
		name,
		filePath,
		formData:data,
		success:res=>funSuccess(res)
	})
}
/**
 * 同步的写法实现异步请求，async块内部代码是同步执行的，会等待await代码行的执行结果
 * 如果在lambda表达式内，async应该卸载匿名函数参数的前面
 */
function requestAsync(url,data={},method="GET"){
	return new Promise((resolve,rejects)=>{
		uni.request({
			url:url,
			method:method,
			data:data,
			success:res =>{
				resolve(res)
			},
			fail:err=>{
				rejects(err)
			},
			complete:()=>{}
		});
	})
}
module.exports = {
	//开放导出
	get,
	getWithHeader, //header:getWithHeader
	postParam,
	post,
	deleteParams,
	postFile,
	requestAsync
}
